package com.chenfan.filestore.controller;



import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.api.ApiController;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chenfan.ccp.common.result.R;
import com.chenfan.filestore.dto.TaskDTO;
import com.chenfan.filestore.dto.TaskQueryDTO;
import com.chenfan.filestore.model.Task;
import com.chenfan.filestore.service.TaskService;
import com.chenfan.filestore.service.biz.TaskBiz;
import com.chenfan.filestore.vo.TaskVO;
import com.chenfan.infra.context.TenantContextHolder;
import com.chenfan.websocket.api.WebSocketClient;
import com.chenfan.websocket.api.dto.WebSocketMessageDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;

/**
 * 任务表(Task)表控制层
 *
 * @author Leo
 * @since 2023-04-27 11:46:11
 */
@RestController
@RequestMapping("/batch/task")
@Slf4j
public class TaskController{
    /**
     * 服务对象
     */
    @Resource
    private TaskBiz taskBiz;

    @Autowired
    private WebSocketClient webSocketClient;

    /**
     * 分页查询列表数据
     * @return 所有数据
     */
    @PostMapping("/page")
    public R page(@RequestBody TaskQueryDTO queryDTO) {
        Page<TaskVO> page = taskBiz.page(queryDTO);
        return R.data(page);
    }

    /**
     * 获取任务id
     *
     * @param taskId 主键
     * @return 单条数据
     */
    @GetMapping("/detail/{taskId}")
    public R selectOne(@PathVariable Long taskId) {
        return R.data(taskBiz.get(taskId));
    }

    /**
     * 创建任务
     *
     * @param task 实体对象
     * @return 新增结果
     */
    @PostMapping("/create")
    public R<String> create(@RequestBody TaskDTO task) {
        log.info("批处理任务创建请求参数=={}", JSONUtil.toJsonStr(task));
        taskBiz.add(task);
        return R.data(task.getTaskId()+"");
    }

    /**
     * 修改数据
     *
     * @param task 实体对象
     * @return 修改结果
     */
    @PostMapping("/updateById")
    public R<Void> updateById(@RequestBody TaskDTO task) {
        taskBiz.updateById(task);
        return R.ok();
    }


    /**
     * 发送消息
     *
     * @param msg 实体对象
     * @return 修改结果
     */
    @PostMapping("/websocketPush")
    public R<Void> websocketPush(@RequestBody WebSocketMessageDTO msg) {
        webSocketClient.websocketPush(msg);
        return R.ok();
    }

}

